package com.ssm.user.event;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.event.TransactionalEventListener;

@Service
@Slf4j
public class PersonEventListener {
    /**
     * @TransactionalEventListener 事务事件监听
     * 在默认情况下仅仅会被事务中发布的事件触发，如果需要在没有事务也能当作普通时间监听器触发，那么需要将fallbackExecution属性设置为true。
     */
    @TransactionalEventListener(fallbackExecution = true)
    public void listenCreateEvent(PersonChangeEvent personChangeEvent) {
        switch (personChangeEvent.getOp()) {
            case "create" :
                // 自定义监听后需要执行的逻辑
                // 可以加些后续操作，例如添加缓存、更新缓存等
                log.info("创建Person对象：{}", JSON.toJSONString(personChangeEvent.getPerson()));
                break;

            case "update":
                log.info("更新Person对象：{}", JSON.toJSONString(personChangeEvent.getPerson()));
                break;

            default:
                break;
        }
    }
}
